package org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.habilidad;

import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.entrenador.Sugerencia;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.Futbolista;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.FutbolistaBase;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista.Oponente;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.util.Balon;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.util.PosicionCampo;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.util.PosicionFutura;

/**
 * @author Joan Crosas
 *
 */
public class PreparacionRegate extends HabilidadConBalon {
	private int tiempoSinHacerNada;

	public PreparacionRegate( Futbolista futbolista ) {
		super(futbolista);
		tiempoSinHacerNada = 0;
	}

	@Override
	public boolean ejecutar() {
		if( futbolista.getVisionPartido().futbolistaBalonControlado() == futbolista ) { 
			/*
			 * miramos como va el bal�n
			 */
			int tiempoOponentesInterceptan = futbolista.getVisionPartido().seguridadBalon();
			Balon balonPartido = futbolista.getVisionPartido().getBalon();
			Oponente oponente = futbolista.getVisionPartido().oponenteMasCercanoBalon();
			PosicionFutura posicionSiguienteBalon = futbolista.podreInterceptarPase( balonPartido, 0, false );
			
			if( tiempoOponentesInterceptan < FutbolistaBase.TIEMPO_MAX_SIN_GOLPEAR_BALON &&
					tiempoOponentesInterceptan > 3 &&
					posicionSiguienteBalon != null && 
					posicionSiguienteBalon.getTiempo() < tiempoOponentesInterceptan + 1 &&
					oponente.getPosicion().getY() > balonPartido.getPosicionBalon().getY() &&
					balonPartido.getPosicionBalon().distancia( oponente.getPosicion() ) > 
						balonPartido.getPosicionBalon( 1 ).distancia( oponente.getPosicion() ) && // el balon va en direccion al oponente
					balonPartido.getVelocidad() < futbolista.getVelocidad() &&
					tiempoSinHacerNada < FutbolistaBase.TIEMPO_MAX_SIN_GOLPEAR_BALON ) {
				
				double anguloBalonOponente = balonPartido.getPosicionBalon().angulo( oponente.getPosicion() );
				double anguloBalonJugador = anguloBalonOponente - 3 * Math.PI / 8;
				if( oponente.getPosicion().getX() > balonPartido.getPosicionBalon().getX() ) {
					anguloBalonJugador = anguloBalonOponente + 3 * Math.PI / 8;
				}
				PosicionCampo posicionJugador = balonPartido.getPosicionBalon( 1 );
				posicionJugador = posicionJugador.moverAngulo( anguloBalonJugador, 0.98 ); // queremos que el jugador siga dentro del alcanze del bal�n
				
				Sugerencia sugerencia = new Sugerencia( Sugerencia.TipoSugerencia.REGATE );
				sugerencia.setFutbolista( futbolista );
				sugerencia.setPosicionDestino( posicionJugador.setDentroCampoJuego() );
				sugerencia.setTiempoValida( 6 );
				futbolista.getVisionPartido().addSugerencia( sugerencia );
				
				tiempoSinHacerNada++;
				
				return true; // encontramos una accion que no es hacer nada
				
			} else {
				tiempoSinHacerNada = 0;
			}
		}
		return false;
	}
		

}
